Linux下time命令进行性能分析
在linux中,我们通常用time命令来计算某个程序或某个命令、脚本的运行耗时,比如我需要查看ps命令执行时间
通常会在命令执行结束后,输出统计结果,统计结果中有三个统计时间,分别是real、user、sys,详细解释如下:
real:从进程 ps 开始执行到完成所耗费的 CPU 总时间。该时间包括 ps 进程执行时实际使用的 CPU 时间,ps 进程耗费在阻塞上的时间(如等待完成 I/O 操作)和其他进程所耗费的时间(Linux 是多进程系统,ps 在执行过程中,可能会有别的进程抢占 CPU)。
user:进程 ps 执行用户态代码所耗费的 CPU 时间。该时间仅指 ps 进程执行时实际使用的 CPU 时间,而不包括其他进程所使用的时间和本进程阻塞的时间。
sys:进程 ps 在内核态运行所耗费的 CPU 时间,即执行内核系统调用所耗费的 CPU 时间。
今天要说的这个time命令有点不一样,它不是一个内置的命令工具,我们上面用的time是一个bash的内置shell关键字
而我们今天要说的这个time命令是一个强大的性能分析工具,安装方法很简单,直接通过yum安装即可
安装完成后即可使用
和time一样,也是在最后显示统计信息,比time统计的信息要全面,但是输出的格式不太友好,在time命令后添加-v选项
显示更详细的内容,包括执行时间、CPU占用、内存占用、IO等,详细的输出指标介绍如下:
Elapsed (wall clock) time 执行命令所花费的时间,格式是:[hour]:minute:second
System time 命令执行时在内核模式所花费的时间,单位是秒
User time 命令执行时在使用者模式所花费的时间,单位是秒
Percent of CPU this job got 命令执行时 CPU 的占用比例。
其实这个数字就是内核模式的 CPU 时间加上使用者模式的 CPU 时间除以总时间Maximum resident set size 执行程序所占用内存的最大值。单位是 KB
Average resident set size 执行程序所占用内存的平均值,单位是 KB
Average total size 执行程序所占用的内存总量(stack+data+text)的平均大小, 单位是 KB
Average unshared data size 执行程序所占用的私有数据区(unshared data area)的平均 大小,单位是 KB
Average stack size 执行程序所占用的私有堆栈(unshared stack)的平均大小, 单位是 KB
Average shared text size 执行程序间共享内容(shared text)的平均值,单位是 KB
Page size 系统内存页的大小,单位是 byte。对于同一个系统来说,这 是个常数
Major (requiring I/O) page faults 此程序的主要内存页错误发生的次数。
所谓的主要内存页错误是指某一内存页己经詈换到 SWAP 分区中,又被其他程序使用过,该页的内容必须从 SWAP 分区里再读出来才能使用Minor (reclaiming a frame) page faults 此程序的次要内存页错误发生的次数。
所谓的次要内存页错误是指某一内存页虽然己经詈换到 SWAP 中,但尚未被其他程序使用。此时该页的内容并未 被破坏,不必从 SWAP 分区里读出来即可直接使用Swaps 此程序被交换到 SWAP 分区的次数
Involuntary context switches 此程序被强迫中断(如 CPU 时间耗尽)的次数
Voluntary context switches 此程序自愿中断(I/O 执行完毕,磁碟读取完成等)的次数
File system inputs 此程序所输入的文件数
File system outputs 此程序所输出的文件数
Socket messages received 此程序所收到的 Socket Message
Socket messages sent 此程序所送出的 Socket Message
Signals delivered 此程序所收到的信号数
Exit status 命令退出状态
通过time命令的输出,可以很直观的查看到应用、脚本或命令的性能问题是出现在什么地方
使用该time命令,可以通过命令前加'\',或者指定目录/usr/bin/time来执行,否则使用的是bash中的time
更多精彩内容请扫描下方二维码关注公众号